package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/*预编译的sql语句
预编译的sql语句是将数值可以先用 ？ 占位，完然后将其发送给数据库语句定义
然后将需要的数值发送给数据库来进行执行，避免拼接sql语句导致语义改变的sql注入攻击问题
开发中只要发生要讲用户输入的而信息体现到sql语句中的情况，就应当使用预编译sql
只有静态sql才用 Statement
 */
public class JDBCDemo06 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = scanner.nextLine();
        System.out.println("请输入密码");
        String password = scanner.nextLine();
        try (Connection connection = DBUtil.getConnection()){
            String sql = "SELECT id,username,password,nickname,age " +
                         "FROM userinfo " +
                         "WHERE username = ? " +
                         "AND password = ?";
            //创建PreparedStatement是就已经将预编译sql语句发送给了数据库
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1,username);
            ps.setString(2,password);
            ResultSet rs = ps.executeQuery();
            if (rs.next()){
                System.out.println("欢迎回来，登录成功：" + rs.getString("nickname"));
            }else {
                System.out.println("登录失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
